Set hostname in DHCP config from the guest name, and if more than one interface
authoremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>
Sat, 3 Dec 2005 12:21:27 +0000 (12:21 +0000)
committeremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>
Sat, 3 Dec 2005 12:21:27 +0000 (12:21 +0000)
is specified, from guest-2, guest-3 etc.  Have the DHCP server send the
hostname to the guest.

Added a lock around DHCP config file frobbing, to avoid racing creation vs
deletion.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
tools/examples/vif-nat

index d667fb89da60f7c47d93790965a8d7821130d123..896f5961d1003a32cc1e425a653a6dd15299d190 100644 (file)
@@ -42,14 +42,15 @@ then
 fi
 
 
+domid=$(echo "$XENBUS_PATH" | sed -n 's#.*/\([0-9]*\)/[0-9]*$#\1#p')
+vifid=$(echo "$XENBUS_PATH" | sed -n 's#.*/[0-9]*/\([0-9]*\)$#\1#p')
+vifid=$(( $vifid + 1 ))
+
+
 ip_from_dom()
 {
-  local domid=$(echo "$XENBUS_PATH" | sed -n 's#.*/\([0-9]*\)/[0-9]*$#\1#p')
-  local vifid=$(echo "$XENBUS_PATH" | sed -n 's#.*/[0-9]*/\([0-9]*\)$#\1#p')
-
   local domid1=$(( $domid / 256 ))
   local domid2=$(( $domid % 256 ))
-  vifid=$(( $vifid + 1 ))
 
   echo "10.$domid1.$domid2.$vifid/16"
 }
@@ -92,10 +93,17 @@ netmask=$(dotted_quad $intmask)
 network=$(dotted_quad $(( $vif_int & $intmask )) )
 
 
+hostname=$(xenstore_read "$XENBUS_PATH/domain" | tr -- '_.:/+' '-----')
+if [ "$vifid" != "1" ]
+then
+  hostname="$hostname-$vifid"
+fi
+
+
 dhcp_remove_entry()
 {
   local tmpfile=$(mktemp)
-  grep -v "host Xen-${vif/./-}" "$dhcpd_conf_file" >"$tmpfile"
+  grep -v "host $hostname" "$dhcpd_conf_file" >"$tmpfile"
   if diff "$tmpfile" "$dhcpd_conf_file" >/dev/null
   then
     rm "$tmpfile"
@@ -107,18 +115,21 @@ dhcp_remove_entry()
 
 dhcp_up()
 {
+  claim_lock "vif-nat-dhcp"
   dhcp_remove_entry
   mac=$(xenstore_read "$XENBUS_PATH/mac")
   echo >>"$dhcpd_conf_file" \
-"host Xen-${vif/./-} { hardware ethernet $mac; fixed-address $vif_ip; option routers $router_ip; }"
-
-  "$dhcpd_init_file" restart
+"host $hostname { hardware ethernet $mac; fixed-address $vif_ip; option routers $router_ip; option host-name \"$hostname\"; }"
+  release_lock "vif-nat-dhcp"
+  "$dhcpd_init_file" restart || true
 }
 
 
 dhcp_down()
 {
+  claim_lock "vif-nat-dhcp"
   dhcp_remove_entry
+  release_lock "vif-nat-dhcp"
   "$dhcpd_init_file" restart || true # We need to ignore failure because
                                      # ISC dhcpd 3 borks if there is nothing
                                      # for it to do, which is the case if